package com.example.forum.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


//表示一个配置类
@Configuration
public class AppInterceptorConfigurer implements WebMvcConfigurer {

    //注入登录的自定义拦截器
    @Autowired
    private LoginInterceptor loginInterceptor;
    
    //注入管理员权限拦截器
    @Autowired
    private AdminInterceptor adminInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       // 登录拦截器
       registry.addInterceptor(loginInterceptor)
               .addPathPatterns("/**") // 拦截所有请求
               .excludePathPatterns("/sign-in.html") // 排除登录HTML
               .excludePathPatterns("/sign-up.html") // 排除注册HTML
               .excludePathPatterns("/user/login") // 排除登录api接⼝
               .excludePathPatterns("/user/register") // 排除注册api接⼝
               .excludePathPatterns("/user/logout") // 排除退出api接⼝
               .excludePathPatterns("/swagger*/**") // 排除登录swagger下所有
               .excludePathPatterns("/v3*/**") // 排除登录v3下所有，与swag
               .excludePathPatterns("/dist/**") // 排除所有静态⽂件
               .excludePathPatterns("/image/**")
               .excludePathPatterns("/upload/**") // 确保上传的图片可以被公开访问
               .excludePathPatterns("/**.ico")
               .excludePathPatterns("/js/**")
               // 以下是新增的允许公开访问的路径
               .excludePathPatterns("/") // 允许访问首页
               .excludePathPatterns("/home") // 允许访问首页
               .excludePathPatterns("/index.html") // 允许访问首页HTML
               
               // 文章相关API
               .excludePathPatterns("/article/list") // 允许访问文章列表页面
               .excludePathPatterns("/article/detail") // 允许访问文章详情页面
               .excludePathPatterns("/article/hot") // 允许访问热门文章页面
               .excludePathPatterns("/article/board/**") // 允许访问板块文章页面
               .excludePathPatterns("/article/getDetails") // 获取文章详情API
               .excludePathPatterns("/article/getSortedArticles") // 获取排序文章列表API
               .excludePathPatterns("/article/getAllByUserId") // 获取用户文章API
               .excludePathPatterns("/article/getAllByBoardId") // 获取板块文章API
               .excludePathPatterns("/article/edit/**") // 允许访问文章编辑页面（前端会处理登录检查）
               
               // 板块相关API
               .excludePathPatterns("/board/list") // 允许访问板块列表页面
               .excludePathPatterns("/board/getIndexBoard") // 首页板块API
               .excludePathPatterns("/board/getAllBoard") // 所有板块API
               .excludePathPatterns("/board/getBoardById")
               .excludePathPatterns("/board/topList") 
               .excludePathPatterns("/board/getById") // 获取置顶板块API
               
               // 公告相关API
               .excludePathPatterns("/announcement/list") // 允许访问公告列表页面
               .excludePathPatterns("/announcement/detail") // 允许访问公告详情页面
               .excludePathPatterns("/announcement/top") // 允许访问置顶公告页面
               .excludePathPatterns("/announcement/getList") // 获取公告列表API
               .excludePathPatterns("/announcement/getDetail") // 获取公告详情API
               .excludePathPatterns("/announcement/getTopAnnouncements") // 获取置顶公告API
               
               // 用户相关公开API
               .excludePathPatterns("/user/info") 
               .excludePathPatterns("/user/active")// 获取用户信息API（公开部分）
               
               // 其他静态资源
               .excludePathPatterns("/favicon.ico")
               .excludePathPatterns("/static/**")
               .excludePathPatterns("/css/**")
               .excludePathPatterns("/fonts/**")
               .excludePathPatterns("/img/**")
               
               // 回复API
               .excludePathPatterns("/reply/getReplies"); // 允许未登录访问文章评论API
               
       // 管理员权限拦截器
       registry.addInterceptor(adminInterceptor)
               .addPathPatterns("/admin/**") // 只拦截管理员相关请求
               .excludePathPatterns("/admin/check"); // 排除管理员权限检查接口
    }
}
